// 在 Maybe 函子中，做了一些容错处理，这次，捕获一下错误信息
class Left {
  static of (value) {
    return new Left(value);
  }

  constructor(value) {
    this._value = value;
  }

  map() {
    return this;
  }
}

class Right {
  static of (value) {
    console.log(1);
    console.log(value, 'value');
    return new Right(value);
  }

  constructor(value) {
    this._value = value;
  }

  map(fn) {
    return Right.of(fn(this._value));
  }
}

// 写一个捕捉错误的函数
function parseJSON(str) {
  try {
    return Right.of(JSON.parse(str));
  } catch(error) {
    return Left.of({ error: error.message });
  }
}

const r = parseJSON('{ "name": "nanyi" }')
            .map(n => n.name.toUpperCase());
// const r = parseJSON('{ name: 嘉文四世 }');
console.log(r, 'r');
